package project.suntray.com.core.app;

import android.widget.TextView;

import java.util.WeakHashMap;

/**
 * Created by zhangyang on 2017/12/12 13:42.
 * version 1
 * 配置项的使用
 */
public class Configurtor {

    //定义一个map集合
    private final WeakHashMap<String,Object> NATTE_CONFIGURE=new WeakHashMap<String,Object>();

    /**
     * 构造方法
     */
    public Configurtor(){
        //进行配置 false
        NATTE_CONFIGURE.put(ConfigureType.CONFIGURE_READY.name(),false);
    }

    /**
     * 获取实例
     * @return
     */
    public static final Configurtor getInstance(){
        return Holder.instance;
    }


    /**
     * 对应的Holer类
     */
    public static final class Holder{
     /**
       * 对应的实体实例
       */
       public final static  Configurtor instance=new Configurtor();
    }

    /**
     * 配置完成
     */
    public final Configurtor config(){
        NATTE_CONFIGURE.put(ConfigureType.CONFIGURE_READY.name(),true);
        return this;
    }

    /**
     * 校验是否完成 配置!
     * @return
     */
    public final void checkReady(){
        Boolean flag=(Boolean) NATTE_CONFIGURE.get(ConfigureType.CONFIGURE_READY.name());
        if(!flag){
            throw new RuntimeException("configure not ready!");
        }
    }
    /**
     * 获取 配置相关的集合数据
     * @return
     */
    public final WeakHashMap<String,Object> getConfigurations(){
        //首先校验
        checkReady();
       return  NATTE_CONFIGURE;
    }

    /**
     * 进行配置 Host
     * @param host
     * @return
     */
    public final Configurtor withApiHost(String host){
        NATTE_CONFIGURE.put(ConfigureType.API_HOST.name(),host);
        return  this;
    }

    /**
     * 获取对应key的value 值!
     *
     * @param key
     * @param <T>
     * @return
     */
    public final <T> T getConfigure(String key) {
        //校验是否准备好!
        checkReady();
        T t = (T) NATTE_CONFIGURE.get(key);
        if (t == null) {
            throw new NullPointerException("key's value is null");
        }
        return t;
    }
}
